from rest_framework import serializers
from .models import *
from drf_yasg.utils import swagger_serializer_method
from drf_yasg import openapi

# 学科序列化器,查询父章节子章节
class SubjectSerializer(serializers.ModelSerializer):
    children = serializers.SerializerMethodField()  # 用于序列化子章节的字段
    label = serializers.CharField(source='name', max_length=100)  # 映射到模型的 name 字段

    def get_children(self, obj):
        return SubjectSerializer(obj.children.all(), many=True).data

    class Meta:
        model = Subject
        fields = ['id', 'label', 'key', 'children', 'type']


class SubjectCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Subject
        fields = ('name', 'key', 'parent')  # 包含创建所需的所有字段
        extra_kwargs = {
            'key': {
                'required': False,  # 允许不手动传入key（由模型自动生成）
                'help_text': '可选字段，不填写时将自动生成唯一key'
            },
            'parent': {
                'required': False,  # 允许顶级学科（无父级）
                'help_text': '父级学科ID（可选，不填表示顶级学科）'
            }
        }
